Python에서는 static(정적) 메소드를 데코레이터로 정의 할 수 있음
@staticmethod, @classmethod를 사용한다.
이 둘의 차이점은 classmethod의 경우는 첫번째 인수가 클래스를 지정하는데 반해 staticmethod는 인수를 받지 않음!!!
따라서 상속받는 경우 동작이 다름
In [1]:
class foo(object):
name = 'foo'
@staticmethod
def get_name_static():
print(foo.name)
@classmethod
def get_name_class(cls):
print(cls.name)
In [2]:
foo.get_name_static()
In [3]:
foo.get_name_class()
In [5]:
class bar(foo):
name = 'bar'
In [6]:
bar.get_name_static()
In [7]:
bar.get_name_class()
In [8]:
class foo(object):
@classmethod
def set_name(cls, name):
cls.name = name
class bar(foo):
pass
In [9]:
foo.set_name("foo")
print(foo.name)
print(bar.name)
bar.set_name("bar")
print(foo.name)
print(bar.name)
In [10]:
class foo(object):
@staticmethod
def set_name(name):
foo.name = name
class bar(foo):
pass
In [11]:
foo.set_name("foo")
print(foo.name)
print(bar.name)
bar.set_name("bar")
print(foo.name)
print(bar.name)
In [ ]: